package com.dms.modules.merchant.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dms.modules.merchant.entity.Merchant;
import com.dms.modules.user.dto.MerchantApplyDTO;
import org.springframework.security.core.userdetails.UserDetailsService;
import com.dms.modules.merchant.dto.ShopQueryDTO;
import com.dms.modules.merchant.vo.ShopDisplayVO;
import com.dms.modules.product.vo.ProductVO;
import com.dms.modules.merchant.vo.MerchantShopVO;

import java.util.List;

/**
 * 商家服务接口
 */
public interface MerchantService extends IService<Merchant>, UserDetailsService {

    /**
     * 创建商家
     * @param merchant 商家信息
     * @return 是否创建成功
     */
    boolean createMerchant(Merchant merchant);

    /**
     * 更新商家信息
     * @param merchant 商家信息
     * @return 是否更新成功
     */
    boolean updateMerchant(Merchant merchant);

    /**
     * 删除商家
     * @param id 商家ID
     * @return 是否删除成功
     */
    boolean deleteMerchant(Long id);

    /**
     * 更新商家状态
     * @param id 商家ID
     * @param status 状态
     * @return 是否更新成功
     */
    boolean updateStatus(Long id, Integer status);

    /**
     * 重置密码
     * @param id 商家ID
     * @return 是否重置成功
     */
    boolean resetPassword(Long id);

    /**
     * 根据用户名获取商家
     * @param username 用户名
     * @return 商家信息
     */
    Merchant getByUsername(String username);

    /**
     * 分页查询商家列表
     * @param page 分页参数
     * @param keyword 搜索关键词
     * @return 分页结果
     */
    IPage<Merchant> getMerchantPage(Page<Merchant> page, String keyword);
    
    /**
     * 分配角色
     * @param merchantId 商家ID
     * @param roleIds 角色ID列表
     * @return 是否成功
     */
    boolean assignRoles(Long merchantId, List<Long> roleIds);
    
    /**
     * 获取商家的角色ID列表
     * @param merchantId 商家ID
     * @return 角色ID列表
     */
    List<Long> getRoleIds(Long merchantId);
    
    /**
     * 用户申请成为商家
     * @param userId 用户ID
     * @param applyDTO 申请信息
     * @return 商家ID
     */
    Long applyMerchant(Long userId, MerchantApplyDTO applyDTO);
    
    /**
     * 更新商家登录信息
     * @param id 商家ID
     * @param ip 登录IP
     */
    void updateLoginInfo(Long id, String ip);
    
    /**
     * 更新用户角色
     * @param userId 用户ID
     * @param roleId 角色ID
     * @return 是否成功
     */
    boolean updateUserRole(Long userId, Long roleId);

    // /**
    //  * 获取待审核商家列表
    //  * @return 待审核的商家列表
    //  */
    // List<Merchant> getPendingMerchants();

    /**
     * 搜索商家
     * @param keyword 关键词（可搜索用户名、昵称、店铺名称、联系电话、地址等）
     * @return 商家列表
     */
    List<Merchant> searchMerchants(String keyword);

    /**
     * 获取非审核通过的商家列表（包括待审核和已拒绝的商家）
     *
     * @return 非审核通过的商家列表
     */
    List<Merchant> getNonApprovedMerchants();

    /**
     * 根据用户ID获取商家信息
     * @param userId 用户ID
     * @return 商家信息
     */
    Merchant getByUserId(Long userId);

    /**
     * 获取店铺列表
     */
    IPage<ShopDisplayVO> getShopList(ShopQueryDTO queryDTO);
    
    /**
     * 获取店铺详情
     */
    ShopDisplayVO getShopDetail(Long id);
    
    /**
     * 获取店铺商品列表
     */
    IPage<ProductVO> getShopProducts(Long shopId, Integer pageNum, Integer pageSize, Long categoryId);

    /**
     * 获取商家月销量
     */
    int getMonthlySales(Long merchantId);
    
    /**
     * 获取商家总销量
     */
    int getTotalSales(Long merchantId);
    
    /**
     * 获取商家商品数量
     */
    int getProductCount(Long merchantId);

    /**
     * 获取商家店铺信息
     * @param merchantId 商家ID
     * @return 店铺信息VO
     */
    MerchantShopVO getShopInfo(Long merchantId);
} 